home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 17 / Computer Interactive cdrom 17 - gen 99.iso / ZDNETIT / CONTENT / OPTIVDOS.ZIP / INCLUDE.ZIP / VFSTD.H < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-21  |  13.7 KB  |  296 lines

  1. /*  VFstd.h
  2.  
  3.   vector management functions:
  4.   manipulations on whole arrays or vectors of data type "float"
  5.   (real numbers)
  6.  
  7.   Copyright (c) 1996-1998 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VFSTD_H
  12. #define __VFSTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. /*************************  Generation  **************************/
  22.  
  23. fVector   __vf  VF_vector( ui size );
  24. fVector   __vf  VF_vector0( ui size );
  25.  
  26. /***************  Addressing single vector elements ******************/
  27.  
  28. float _VFAR * VF_Pelement( fVector X, ui n );
  29.       /* returns a pointer to the n'th element of X. For the memory model
  30.          HUGE, the pointer is normalized. */
  31. #define VF_element( X, n )  (*VF_Pelement( X, n ))
  32.  
  33. /*******************  Initialization **********************************/
  34.  
  35. void  __vf  VF_equ0( fVector X, ui size );
  36. void  __vf  VF_equ1( fVector X, ui size );
  37. void  __vf  VF_equC( fVector X, ui size, float C );
  38. void  __vf  VF_equV( fVector Y, fVector X, ui size );
  39. void  __vf  VFx_equV( fVector Y, fVector X, ui size, float A, float B );
  40. void  __vf  VF_ramp( fVector X, ui size, float Start, float Rise );
  41. void  __vf  VF_Parzen( fVector X, ui size );
  42. void  __vf  VF_Welch( fVector X, ui size );
  43. void  __vf  VF_Hanning( fVector X, ui size );
  44. void  __vf  VF_comb( fVector X, ui size, unsigned step, float C );
  45. long  __vf  VF_random( fVector X, ui size, long seed,
  46.                        float MinVal, float MaxVal );
  47. long  __vf  VF_noise( fVector X, ui size, long seed, float Amp );
  48.             /* VF_random and VF_noise return a new seed value.
  49.                random quality of VF_random is much better      */
  50.  
  51. /***************  Data-type interconversions  *************************/
  52.        /* for rounding functions, see VFmath.h ! */
  53.  
  54. void  __vf   V_SItoF(  fVector Y, siVector X, ui size );
  55. void  __vf   V_ItoF(   fVector Y, iVector  X, ui size );
  56. void  __vf   V_LItoF(  fVector Y, liVector X, ui size );
  57. void  __vf   V_QItoF(  fVector Y, qiVector X, ui size );
  58.  
  59. void  __vf   V_UStoF(  fVector Y, usVector X, ui size );
  60. void  __vf   V_UtoF(   fVector Y, uVector  X, ui size );
  61. void  __vf   V_ULtoF(  fVector Y, ulVector X, ui size );
  62.  
  63. void  __vf   V_FtoD( dVector Y, fVector X, ui size );
  64. void  __vf   V_DtoF( fVector Y, dVector X, ui size );
  65. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported */
  66.     void  __vf   V_FtoE( eVector Y, fVector X, ui size );
  67.     void  __vf   V_EtoF( fVector Y, eVector X, ui size );
  68. #else  /* no IEEE number support with Visual C++ */
  69.     #define V_FtoE V_FtoD
  70.     #define V_EtoF V_DtoF
  71. #endif
  72.  
  73.  
  74. /****************  Index-oriented manipulations ***********************/
  75.  
  76. void  __vf  VF_reflect( fVector X, ui size );
  77. void  __vf  VF_rev( fVector Y, fVector X, ui size );
  78. #if defined (V_HUGE)
  79.     void  __vf  VF_rotate( fVector Y, fVector X, ui size, long pos );
  80. #else
  81.     void  __vf  VF_rotate( fVector Y, fVector X, ui size, int pos );
  82. #endif
  83. void  __vf  VF_delete( fVector X, ui size, ui pos );
  84. void  __vf  VF_insert( fVector X, ui size, ui pos, float C );
  85. void  __vf  VF_sort( fVector Y, fVector X, ui size, int dir );
  86. void  __vf  VF_sortind( uiVector Ind, fVector X, ui size, int dir );
  87. void  __vf  VF_subvector( fVector Y, ui sizey, fVector X, int samp );
  88. void  __vf  VF_indpick( fVector Y, uiVector Ind, ui sizey, fVector X );
  89. void  __vf  VF_indput(  fVector Y, fVector X, uiVector Ind, ui sizex );
  90. ui    __vf  VF_searchC( fVector X, ui size, float C, int mode );
  91. void  __vf  VF_searchV( uiVector Ind, fVector X, ui sizex,
  92.                                      fVector Tab, ui sizetab, int mode );
  93.  
  94. void  __vf  VF_polyinterpol( fVector Y, fVector X, ui sizex,
  95.                         fVector XTab, fVector YTab, ui sizetab, unsigned deg );
  96. void  __vf  VF_ratinterpol( fVector Y, fVector X, ui sizex,
  97.                         fVector XTab, fVector YTab, ui sizetab, unsigned deg );
  98. void  __vf  VF_splinederiv2( fVector Y2, fVector XTab, fVector YTab,
  99.                             ui tabsize, int specify, float Yp0, float Ypn );
  100. void  __vf  VF_splineinterpol( fVector Y, fVector X, ui sizex,
  101.                     fVector XTab, fVector YTab, fVector Y2Tab, ui sizetab );
  102.  
  103.  
  104. /***************** Functions of a sub-set of elements  ********************/
  105.  
  106. void  __vf  VF_subvector_equC(  fVector Y, ui subsiz, unsigned samp, float C );
  107. void  __vf  VF_subvector_equV(  fVector Y, ui subsiz, unsigned samp, fVector X );
  108.      /*  for arithmetic functions performed on subvectors, see <VFmath.h> */
  109.  
  110.  
  111. /**************** One-Dimensional Vector Operations ***********************/
  112.  
  113. float      __vf  VF_max( fVector X, ui size );
  114. float      __vf  VF_min( fVector X, ui size );
  115. float      __vf  VF_absmax( fVector X, ui size );
  116. float      __vf  VF_absmin( fVector X, ui size );
  117. float      __vf  VF_maxind( ui _VFAR *Ind, fVector X, ui size );
  118. float      __vf  VF_minind( ui _VFAR *Ind, fVector X, ui size );
  119. float      __vf  VF_absmaxind( ui _VFAR *Ind, fVector X, ui size );
  120. float      __vf  VF_absminind( ui _VFAR *Ind, fVector X, ui size );
  121. ui         __vf  VF_localmaxima( uiVector Ind, fVector X, ui size );
  122. ui         __vf  VF_localminima( uiVector Ind, fVector X, ui size );
  123. void       __vf  VF_runmax( fVector Y, fVector X, ui size );
  124. void       __vf  VF_runmin( fVector Y, fVector X, ui size );
  125. float      __vf  VF_sum( fVector X, ui size );
  126. float      __vf  VF_prod( fVector X, ui size );
  127. void       __vf  VF_runsum( fVector Y, fVector X, ui size );
  128. void       __vf  VF_runprod( fVector Y, fVector X, ui size );
  129. int        __vf  VF_iselementC( fVector Tab, ui size, float C );
  130. ui         __vf  VF_iselementV( fVector Y, fVector X, ui sizex,
  131.                                 fVector Tab, ui sizetab );
  132.  
  133.  
  134. /**************** Statistical Functions and Building Blocks *************/
  135.  
  136. float   __vf  VF_mean( fVector X, ui size );
  137. float   __vf  VF_meanwW( fVector X, fVector Wt, ui size );
  138. float   __vf  VF_sumabs( fVector X, ui size );
  139. float   __vf  VF_meanabs( fVector X, ui size );
  140. float   __vf  VF_selected_mean( ui _VFAR *nsel, fVector X, ui size,
  141.                  float XMin, float XMax ); /* takes only x with Min<=x<=Max */
  142. float   __vf  VF_median( fVector X, ui size );
  143. float   __vf  VF_sumdevC( fVector X, ui size, float C );
  144. float   __vf  VF_sumdevV( fVector X, fVector Y, ui size );
  145. float   __vf  VF_avdevC( fVector X, ui size, float C );
  146. float   __vf  VF_avdevV( fVector X, fVector Y, ui size );
  147. float   __vf  VF_ssq( fVector X, ui size );  /* sum-of-squares */
  148. float   __vf  VF_rms( fVector X, ui size );  /* root of the mean square */
  149. float   __vf  VF_ssqdevC( fVector X, ui size, float C );
  150. float   __vf  VF_ssqdevV( fVector X, fVector Y, ui size );
  151. float   __vf  VF_meanvar(  float  _VFAR *Var, fVector X, ui size );
  152. float   __vf  VF_meanvarwW(  float  _VFAR *Var, fVector X, fVector Wt, ui size );
  153. float   __vf  VF_varianceC( fVector X, ui size, float C );
  154. float   __vf  VF_varianceV( fVector X, fVector Y, ui size );
  155. float   __vf  VF_varianceCwW( fVector X, fVector Wt, ui size, float C );
  156. float   __vf  VF_varianceVwW( fVector X, fVector Y, fVector Wt, ui size );
  157. float   __vf  VF_chi2( fVector X, fVector Y, fVector InvVar, ui size );
  158. float   __vf  VF_chiabs( fVector X, fVector Y, fVector Wt, ui size );
  159. float   __vf  VF_corrcoeff( fVector X, fVector Y, ui size,
  160.                             float Xmean, float Ymean );
  161. ui      __vf  VF_distribution( uiVector Abund, fVector Limits, ui nbins,
  162.                                fVector X, ui sizex, int mode );
  163.  
  164. void  __vf  VF_linregress( fVector Param, fVector X, fVector Y, ui size );
  165. void  __vf  VF_linregresswW( fVector Param, fVector X, fVector Y,
  166.                              fVector InvVar, ui size );
  167.      /* more linear and nonlinear data fitting routines need MatrixLib
  168.         and are declared in <MFstd.h> !                                */
  169.  
  170.  
  171. /*********  Fourier Transforms, Convolutions, Filtering  ****************/
  172.  
  173. void      __vf   VF_setRspEdit( fComplex Trunc );
  174. fComplex  __vf   VF_getRspEdit( void );
  175. void  __vf   VFl_FFT( fVector Y, fVector X, ui size, int dir );
  176. void  __vf   VFl_filter( fVector Y, fVector X, fVector Flt, ui size );
  177. void  __vf   VFl_autocorr( fVector Y, fVector X, ui size );
  178. void  __vf   VFl_xcorr( fVector Z, fVector X, fVector Y, ui size );
  179. float __vf   VFl_spectrum( fVector Spc, ui specsiz, fVector X, ui xsiz,
  180.                            fVector Win );
  181.                            /* xsiz >= n*specsiz,  Winsiz = 2*specsiz ! */
  182. void  __vf   VFl_convolve( fVector Y, fVector Flt, fVector X,
  183.                            fVector Rsp, ui size );
  184. void  __vf   VFl_deconvolve( fVector Y, fVector Flt, fVector X,
  185.                              fVector Rsp, ui size );
  186. void  __vf   VFs_FFT( fVector Y, fVector X, ui size, int dir );
  187. void  __vf   VFs_filter( fVector Y, fVector X, fVector Flt, ui size );
  188. void  __vf   VFs_autocorr( fVector Y, fVector X, ui size );
  189. void  __vf   VFs_xcorr( fVector Z, fVector X, fVector Y, ui size );
  190. float __vf   VFs_spectrum( fVector Spc, ui specsiz, fVector X, ui xsiz,
  191.                            fVector Win );
  192. void  __vf   VFs_convolve( fVector Y, fVector Flt, fVector X,
  193.                            fVector Rsp, ui size );
  194. void  __vf   VFs_deconvolve( fVector Y, fVector Flt, fVector X,
  195.                              fVector Rsp, ui size );
  196.  
  197.  
  198. #if( defined( __LARGE__ ) || defined( __COMPACT__ ) )
  199.    #define VF_FFT         VFl_FFT
  200.    #define VF_convolve    VFl_convolve
  201.    #define VF_deconvolve  VFl_deconvolve
  202.    #define VF_filter      VFl_filter
  203.    #define VF_autocorr    VFl_autocorr
  204.    #define VF_xcorr       VFl_xcorr
  205.    #define VF_spectrum    VFl_spectrum
  206. #else
  207.    #define VF_FFT         VFs_FFT
  208.    #define VF_convolve    VFs_convolve
  209.    #define VF_deconvolve  VFs_deconvolve
  210.    #define VF_filter      VFs_filter
  211.    #define VF_autocorr    VFs_autocorr
  212.    #define VF_xcorr       VFs_xcorr
  213.    #define VF_spectrum    VFs_spectrum
  214. #endif
  215.  
  216. /********************** Analysis ****************************************/
  217.  
  218. void    __vf  VF_derivC( fVector Y, fVector X, ui size, float Deltat );
  219. void    __vf  VF_derivV( fVector Z, fVector X, fVector Y, ui size );
  220. float   __vf  VF_integralC( fVector X, ui size, float Deltat );
  221. void    __vf  VF_runintegralC( fVector Y, fVector X, ui size, float Deltat );
  222. float   __vf  VF_integralV( fVector X, fVector Y, ui size );
  223. void    __vf  VF_runintegralV( fVector Z, fVector X, fVector Y, ui size );
  224. void    __vf  VF_smooth( fVector Y, fVector X, ui size, unsigned deg );
  225. int     __vf  VF_ismonoton( fVector X, ui size );
  226.  
  227. /****************** Geometrical Vector Arithmetics **************************/
  228.  
  229. float     __vf  VF_scalprod( fVector X, fVector Y, ui size );
  230. void      __vf  VF_xprod( fVector Z, fVector X, fVector Y );
  231. float     __vf  VF_Euclid( fVector X, ui size );
  232.  
  233.  
  234. /***************************  Input and Output *****************************/
  235.  
  236. void  __vf    VF_fprint( FILE _VFAR *stream, fVector X, ui size, unsigned nperline, unsigned linewidth );
  237. #if !(defined _Windows || defined _WINDOWS)
  238.    void  __vf    VF_cprint( fVector X, ui size, unsigned nperline );
  239. #endif
  240. #define       VF_print( x, sz, npl )  VF_fprint( stdout, x, sz, npl, 80 )
  241.                     /*  VF_print is usable only for DOS and EasyWin!  */
  242. void  __vf    VF_write( FILE _VFAR *stream, fVector X, ui size  );
  243. void  __vf    VF_read( fVector X, ui size, FILE _VFAR *stream );
  244.                      /* VF_write, VF_read in ascii format */
  245. void  __vf    VF_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  246. void  __vf    VF_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  247. void  __vf    VF_setWriteFormat( char _VFAR *FormatString );
  248.                                             /* for VF_write and VF_nwrite */
  249. void  __vf    VF_setWriteSeparate( char _VFAR *SepString ); /* for VF_write */
  250. void  __vf    VF_setNWriteSeparate( char _VFAR *SepString ); /* for VF_nwrite */
  251. #ifdef V_HUGE
  252.     void  __vf    VF_store( FILE _VFAR *stream, fVector X, ui size );
  253.     void  __vf    VF_recall( fVector X, ui size, FILE _VFAR *stream );
  254. #else
  255.     #ifdef __cplusplus
  256.          void  inline VF_store( FILE _VFAR *stream, fVector X, ui size )
  257.          {    fwrite( X, sizeof(float), size, stream );
  258.          }
  259.          void  inline VF_recall( fVector X, ui size, FILE _VFAR *stream )
  260.          {    fread(  X, sizeof(float), size, stream );
  261.          }
  262.     #else
  263.         #define VF_store( str, X, sz )  \
  264.                      fwrite( X, sizeof(float), sz, str )
  265.         #define VF_recall( X, sz, str ) \
  266.                      fread(  X, sizeof(float), sz, str )
  267.     #endif
  268. #endif      /* VF_store, VF_recall in binary format */
  269.  
  270. #ifdef __cplusplus
  271. }   // end of extern "C"
  272.          // alternative syntax of convolution and deconvolution
  273.     inline void VFl_convolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  274.                               ui size, float TruncRe, float TruncIm )
  275.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  276.         VFl_convolve( Y, Flt, X, Rsp, size );
  277.     }
  278.     inline void  VFl_deconvolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  279.                                  ui size, float TruncRe, float TruncIm )
  280.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  281.         VFl_deconvolve( Y, Flt, X, Rsp, size );
  282.     }
  283.     inline void VFs_convolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  284.                               ui size, float TruncRe, float TruncIm )
  285.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  286.         VFs_convolve( Y, Flt, X, Rsp, size );
  287.     }
  288.     inline void  VFs_deconvolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  289.                                  ui size, float TruncRe, float TruncIm )
  290.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  291.         VFs_deconvolve( Y, Flt, X, Rsp, size );
  292.     }
  293. #endif   /*  __cplusplus  */
  294.  
  295. #endif   /*  __VFSTD_H  */
  296.